package rickyGame.model
{
	import flash.utils.Dictionary;
	import flash.utils.describeType;


	public class UnitKey
	{
		public function UnitKey()
		{
			
		}
		
		/**
		 * 单位配置集合
		 */
		public static const units:Array=[KeyGoodsUnit,KeyHeroUnit,KeyBuildingUnit];
		
		/**
		 * 英雄配置key
		 */
		public static const  KeyHeroUnit:String="HeroUnit.txt";
		
		/**
		 * 技能配置文件key
		 */
		public static const KeyAbility:String="Ability.txt";
		
		/**
		 * 技能数据配置文件key 
		 */
		public static const KeyAbilityData:String="AbilityData.txt";
		
		/**
		 * 建筑数据配置文件key 
		 */
		public static const KeyBuildingUnit:String="BuildingUnit.txt";
		
		/**
		 * 物品数据配置文件key 
		 */
		public static const KeyGoodsUnit:String="GoodsUnit.txt";
		
		
		/**
		 * 解压文本为对象返回Dictionary对象
		 */
		public static function decompressionClassDic(data:*,key:String="",className:Class=null):Dictionary
		{
			var g:Object;//对像
			var dis:XMLList=null;
			if(className!=null)
				dis=describeType(new className).accessor;
			//生成对像
			var rows:Array=data.split("\r\n");//所有行
			var property:Array=rows[1].split("\t");//第二行
			var columns:Array;//列
			var dic:Dictionary=new Dictionary();
			var p:String;//属性
			var c:String;//值
			var t:String;//类型
			var accessor:*;//访问器
			var rowStri:String;
			
			for(var i:int=2;i<rows.length;i++)
			{
				rowStri=rows[i];
				if(rowStri.indexOf("//")!=-1)
					continue;
				
				columns=rowStri.split("\t");
				if(className==null)
					g=new Object();
				else
					g=new className();
				
				for (var j:int=0;j<property.length;j++)
				{
					if(j<columns.length)
						c=columns[j];
					else
						c="";
					p=property[j];
					
					if(dis!=null)//如果有描述
					{
						accessor=dis.(@name==p);
						if(accessor)
						{
							t=accessor.@type;//类型
							if(t=="*")
								t="Object";
							else if(t=="")
								g[p]=c;
							else
								g[p]=flash.utils.getDefinitionByName(t)(c);
						}
						else
							g[p]=c;
					}
					else
						g[p]=c;
					
				}	
				dic[g[key]]=g;
			}
			
			return dic;
		}
		
		public static function decompressionObjDic(data:String,key:String):Dictionary
		{
			var g:Object;//对像
			var dis:XMLList=null;
//			if(className!=null)
//				dis=describeType(new className).accessor;
			//生成对像
			var rows:Array=data.split("\r\n");//所有行
			var property:Array=rows[1].split("\t");//第二行
			var columns:Array;//列
			var dic:Dictionary=new Dictionary();
			var p:String;//属性
			var c:String;//值
			var t:String;//类型
			var accessor:*;//访问器
			var rowStri:String;
			
			for(var i:int=2;i<rows.length;i++)
			{
				rowStri=rows[i];
				if(rowStri.indexOf("//")!=-1)
					continue;
				
				columns=rowStri.split("\t");
				g=new Object();
				for (var j:int=0;j<property.length;j++)
				{
					if(j<columns.length)
						c=columns[j];
					else
						c="";
					p=property[j];
					
					if(dis!=null)//如果有描述
					{
						accessor=dis.(@name==p);
						if(accessor)
						{
							t=accessor.@type;//类型
							if(t=="*")
								t="Object";

							g[p]=flash.utils.getDefinitionByName(t)(c);
						}
						else
							g[p]=c;
					}
					else
						g[p]=c;
					
				}	
				dic[g[key]]=g;
			}
			
			return dic;
		}
	}
}